// 导入数据库操作模块
const db = require('../db/index')
// 导入appid和secret
const secretKey = require('../secretKey/key')
// 导入JWT
const jwt = require('jsonwebtoken')
// 导入全局的配置文件
const config = require('../config')
// 导入axios
const axios = require('axios')


//  登录接口处理函数
exports.login = (req,res) => {
    //请求获取openid
    const code = req.body.code;         // 获取小程序传来的code
    const appid = secretKey.appid;      // 小程序的appid
    const secret = secretKey.secret;    // 小程序的secret
    const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`;

    axios.get(url).then(data=>{
        console.log(1)
        const openid = data.data.openid;
        // 查询数据库中是否有该用户
        const sql = `select openid from user where openid = '${openid}'`;
        db.query(sql,(err,result)=>{
            console.log(2)
            if(err) return res.cc(err);
            // 注意：不要把密码返回给客户端，所以要将密码设置为空字符串, token信息不要太多，一般设置openid和session_key
            const user = {openid:openid,session_key:data.data.session_key}
            // 生成 Token 字符串
            const tokenStr = jwt.sign(user, config.jwtSecretKey, {
                expiresIn: '10h', // token 有效期为 10 个小时
            })
            console.log(3)
            // 如果数据库中没有该用户
            if(result.length === 0){
                console.log(4)
                // 将用户信息插入到数据库中
                const sql = `insert into user set ?`;
                db.query(sql,{
                    openid,
                    appid,
                    gender:req.body.gender,
                    session_key:data.data.session_key,
                    nickName:req.body.nickName,
                    avatarUrl:req.body.avatarUrl
                },(err,result)=>{
                    if(err) return res.cc(err);
                    if(result.affectedRows !== 1){
                        return res.cc('注册失败！')
                    }
                    res.send({
                        status: 0,
                        message: '注册成功！',
                        data:{
                            token:  'Bearer ' + tokenStr,
                            nickName:req.body.nickName,
                            avatarUrl:req.body.avatarUrl,
                            gender:req.body.gender,
                            openid:openid,
                            session_key:data.data.session_key
                        }
                    })
                })
            }else{
                res.send({
                    status: 0,
                    message: '登录成功！',
                    data:{
                        token:  'Bearer ' + tokenStr,
                        nickName:req.body.nickName,
                        avatarUrl:req.body.avatarUrl,
                        gender:req.body.gender,
                        openid:openid,
                        session_key:data.data.session_key
                    },
                })
            }
            
        })

    })
}

